home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / termsorc.lha / Extras / Source / gtlayout-source.lha / LTP_FillMenu.c < prev    next >
C/C++ Source or Header  |  1995-09-24  |  2KB  |  114 lines

  1. /*  GadTools layout toolkit
  2. **
  3. **  Copyright © 1993-1995 by Olaf `Olsen' Barthel
  4. **  Freely distributable.
  5. **
  6. **  :ts=4
  7. */
  8.  
  9. #include "gtlayout_global.h"
  10.  
  11. #ifdef DO_MENUS
  12.  
  13.     /* LTP_FillSub(struct MenuItem *Item):
  14.      *
  15.      *    Fill in the submenu item IDs.
  16.      */
  17.  
  18. VOID __regargs
  19. LTP_FillSub(ULONG MenuID,ULONG ItemID,struct MenuItem *Item)
  20. {
  21.     ULONG             Count = 0;
  22.     ItemNode        *Node;
  23.     struct MenuItem    *First = Item;
  24.  
  25.     do
  26.     {
  27.         Node = (ItemNode *)((ULONG)Item - sizeof(struct MinNode));
  28.  
  29.         Node -> MenuCode = FULLMENUNUM(MenuID,ItemID,Count);
  30.  
  31.         if(Item -> MutualExclude && (Item -> Flags & CHECKED))
  32.         {
  33.             struct MenuItem    *This        = First;
  34.             ULONG             Exclude    = Item -> MutualExclude;
  35.             UWORD             i;
  36.  
  37.             for(i = 0 ; i < 32 && This ; i++, This = This -> NextItem)
  38.             {
  39.                 if(This != Item && (This -> Flags & CHECKIT) && (Exclude & (1L << i)))
  40.                     This -> Flags &= ~CHECKED;
  41.             }
  42.         }
  43.  
  44.         Count++;
  45.     }
  46.     while(Item = Item -> NextItem);
  47. }
  48.  
  49.     /* FillItem(struct MenuItem *Item):
  50.      *
  51.      *    Fill in the menu item IDs.
  52.      */
  53.  
  54. VOID __regargs
  55. LTP_FillItem(ULONG MenuID,struct MenuItem *Item)
  56. {
  57.     ULONG             Count = 0;
  58.     ItemNode        *Node;
  59.     struct MenuItem    *First = Item;
  60.  
  61.     do
  62.     {
  63.         Node = (ItemNode *)((ULONG)Item - sizeof(struct MinNode));
  64.  
  65.         Node -> MenuCode = FULLMENUNUM(MenuID,Count,NOSUB);
  66.  
  67.         if(Item -> SubItem)
  68.             LTP_FillSub(MenuID,Count,Item -> SubItem);
  69.  
  70.         if(Item -> MutualExclude && (Item -> Flags & CHECKED))
  71.         {
  72.             struct MenuItem    *This        = First;
  73.             ULONG             Exclude    = Item -> MutualExclude;
  74.             UWORD             i;
  75.  
  76.             for(i = 0 ; i < 32 && This ; i++, This = This -> NextItem)
  77.             {
  78.                 if(This != Item && (This -> Flags & CHECKIT) && (Exclude & (1L << i)))
  79.                     This -> Flags &= ~CHECKED;
  80.             }
  81.         }
  82.  
  83.         Count++;
  84.     }
  85.     while(Item = Item -> NextItem);
  86. }
  87.  
  88.     /* LTP_FillMenu(struct Menu *Menu):
  89.      *
  90.      *    Fill in the menu IDs.
  91.      */
  92.  
  93. VOID __regargs
  94. LTP_FillMenu(struct Menu *Menu)
  95. {
  96.     ULONG         Count = 0;
  97.     MenuNode    *Node;
  98.  
  99.     do
  100.     {
  101.         Node = (MenuNode *)((ULONG)Menu - sizeof(struct MinNode));
  102.  
  103.         Node -> MenuCode = FULLMENUNUM(Count,NOITEM,NOSUB);
  104.  
  105.         if(Menu -> FirstItem)
  106.             LTP_FillItem(Count,Menu -> FirstItem);
  107.  
  108.         Count++;
  109.     }
  110.     while(Menu = Menu -> NextMenu);
  111. }
  112.  
  113. #endif    /* DO_MENUS */
  114.